package org.example.rxJava;

import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import rx.Observable;

@Slf4j
public class TransformationDemo {

    @Test
    public void mapDemo() {
        Observable.range(1,4)
                .map(i->i*i)
                .subscribe(s->{
                   log.info(String.valueOf(s));
                });
    }

    @Test
    public void flatMapDemo() {
        // flatMap的第二个参数必须为Observable
        // 打包成一个新的Observable进行元素的弹出
        Observable.range(1,4)
                .flatMap(i-> Observable.just(i, i*i))
                .subscribe(s->{
                    log.info(String.valueOf(s));
                });
    }

    @Test
    public void scanDemo() {
        // 每执行1次相加就进行输出
        Observable.range(1, 10)
                .scan((a, b) -> a+b)
                .subscribe(s->{
                    log.info(String.valueOf(s));
                });
    }

    @Test
    public void reduceDemo() {
        // 每执行1次相加就进行输出
        Observable.range(1, 10)
                .reduce((a, b) -> a+b)
                .subscribe(s->{
                    log.info(String.valueOf(s));
                });
    }
}
